package rmhc.api.tasks
{
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	
	import rmhc.api.ApiWrapper;
	import rmhc.gui.SupplyFunctions;

	//import rmhc.api.IApiWrapper;

	/**
	 * Базовый класс для вызова метода АПИ.
	 */
	public class BaseApiTask extends EventDispatcher
	{
		protected var wrapper:ApiWrapper;
		protected var running:Boolean;
		protected var complete:Boolean;
		
		public function BaseApiTask( wrapper:ApiWrapper )
		{
			this.wrapper = wrapper;
		}
		
		/**
		 * Запускает вызов метода АПИ (т.е. начинает обращение)
		 */
		public function run():void
		{
			//customTrace("BaseApiTask.run");
			running = wrapper.runTask( this );
		}
		/**
		 * Вызываем этот метод когда все экшны сделаны
		 */
		protected function onComplete():void
		{
			complete = true;
			running = false;
			dispatchEvent( new Event( Event.COMPLETE ) );
		}
		
		public function isRunning():Boolean
		{
			return running;
		}
		public function isComplete():Boolean
		{
			return complete;
		}
		public function getRawData():Object
		{
			return null;
		}
		
		public function onError( e:* ):void
		{
			complete = false;
			running = false;
			trace( "api error" + SupplyFunctions.objectToString( e ) );
			if ( e is Error )
			{
				trace( ( e as Error ).getStackTrace() );
			}
			//throw new Error( "api error\n" + SupplyFunctions.formatToString( e ) );
			dispatchEvent( new IOErrorEvent( IOErrorEvent.NETWORK_ERROR , false , false , e ) );
		}
	}
}